package com.sfac.springBoot.config;

import com.sfac.springBoot.interceptor.RequestViewMappingInterceptor;
import org.apache.catalina.connector.Connector;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
import org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration;
import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
import org.springframework.boot.web.servlet.server.ServletWebServerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.util.ResourceUtils;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

/**
 * Web Mvc Config
 */
@Configuration
@AutoConfigureAfter({WebMvcAutoConfiguration.class})
public class WebMvcConfig implements WebMvcConfigurer {

	@Value("${server.http.port}")
	private int httpPort;
	@Autowired
	private ResourceConfigBean resourceConfigBean;
	@Autowired
	private RequestViewMappingInterceptor mappingInterceptor;
	@Bean
	public Connector connector() {
		Connector connector = new Connector();
		connector.setPort(httpPort);
		connector.setScheme("http");
		return connector;
	}

	@Bean
	public ServletWebServerFactory servletWebServerFactory() {
		TomcatServletWebServerFactory factory = new TomcatServletWebServerFactory();
		factory.addAdditionalTomcatConnectors(connector());
		return factory;
	}

	@Override
	public void addResourceHandlers(ResourceHandlerRegistry registry) {
		// 将本地文件夹 D:\static 映射给系统 /static/** 路径地址 
		// D:\static\1111.png ------ 127.0.0.1/static/1111.png
		registry.addResourceHandler("/static/**")
				.addResourceLocations(ResourceUtils.FILE_URL_PREFIX + "D:\\static/");
	}
	@Override
	public void addInterceptors(InterceptorRegistry registry) {
		registry.addInterceptor(mappingInterceptor).addPathPatterns("/**");
	}
}
